const { answerPrompt, pipelinePrompt } = require('../utils/prompt')
const JSON5 = require('json5');
const axios = require('axios');
const ISDEBUG = process.env.ISDEBUG
const SHROTMODEL = 'qwen3:1.7b'
// 构造 Prompt
function buildPrompt(question, schema) {
    return pipelinePrompt(question, schema);
}

function removeThinkTags(str) {
    return str.replace(/<think>[\s\S]*?<\/think>/g, '');
}

function extractMongoPipeline(ntext) {
    let text = removeThinkTags(ntext)
    const jsonStart = text.indexOf('[');
    const jsonEnd = text.lastIndexOf(']') + 1;
    let te = text.slice(jsonStart, jsonEnd)
    console.log('数据提取完成')
    if (ISDEBUG) {
        console.log('数据提取完成')
        console.log(te, '目标查询语句')
        console.log('数据提取完成')
    }
    let ftext = safeExtractPipeline(te);
    if (ftext) {
        // 使用修复后的ftext而不是原始的te进行解析
        return JSON.parse(ftext);
    } else {
        // 如果第一次解析失败，尝试使用更宽松的方法
        try {
            // 修复：使用原始的te而不是ftext进行宽松模式解析
            const clean = te
                .replace(/<think>[\s\S]*?<\/think>/g, '')
                .replace(/```json|```/g, '')
                .trim();
            // 再次尝试更宽松的解析方法
            const relaxedParse = JSON5.parse(clean);
            return relaxedParse;
        } catch (err2) {
            console.error('宽松模式解析也失败:', err2);
            return false;
        }
    }
}

function generateHumanAnswerPrompt(question, queryResult, schema) {
    return answerPrompt(question, queryResult, schema);
}

async function getHumanAnswer(question, queryResult, schema) {
    const prompt = generateHumanAnswerPrompt(question, queryResult, schema);
    // 调用你的大模型 API（如 Ollama、通义千问、ChatGPT）
    const response = await axios.post(
        process.env.AIURL,
        {
            model: SHROTMODEL,
            prompt: prompt,
            stream: false
        }
    );
    let text = removeThinkTags(response.data.response)
    return text
}


function safeExtractPipeline(text) {
    try {
        // 去除 think 标签等噪声
        const clean = text
            .replace(/<think>[\s\S]*?<\/think>/g, '')
            .replace(/```json|```/g, '')
            .trim();
        const result = JSON.parse(clean);
        // 验证结构
        if (Array.isArray(result) && result[0]?.pipeline) {
            return text;
        }
    } catch (err) {
        console.error('严格模式解析失败:', err);
        return false;
    }
}
module.exports = {
    buildPrompt,
    extractMongoPipeline,
    getHumanAnswer,
    generateHumanAnswerPrompt,
    removeThinkTags,

}